export function deepClone (obj: any) {

    // 如果 obj 不是 Object 类型，直接返回    
    if (!obj || typeof obj !== 'object') return obj;

    // Date 和 RegExp 类型比较特殊，特殊处理
    if (obj instanceof Date) return new Date(obj);
    if (obj instanceof RegExp) return new RegExp(obj);

    // 构建一个新对象
    // const newObj = new obj.constructor();
    const newObj:any = obj instanceof Array ? [] : {};

    // 遍历
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = deepClone(obj[key]);
        }
    }

    // 考虑 Symbol 参数
    const symbosProps = Object.getOwnPropertySymbols(obj);
    for (let i = 0; i < symbosProps.length; i++) {
        newObj[symbosProps[i]] = deepClone(obj[symbosProps[i]]);
    }

    return newObj;
}